a45e65d2bf2d1742bdc3bf0c8fb70cf3c03bc7d2,alien4cloud-rest-api/src/main/java/alien4cloud/rest/orchestrator/LocationResourcesSecurityController.java,LocationResourcesSecurityController,updateAuthorizedEnvironmentsPerApplication,#String#String#String#ApplicationEnvironmentAuthorizationUpdateRequest#,246

Before Change


        checkAllAuthorizationsForApplicationsAndEnvironments(request, location);

        LocationResourceTemplate resourceTemplate = locationResourceService.getOrFail(resourceId);
        if (request.getApplicationsToDelete() != null && request.getApplicationsToDelete().length > 0) {
            resourcePermissionService.revokePermission(resourceTemplate, Subject.APPLICATION, request.getApplicationsToDelete());
        }
        if (request.getEnvironmentsToDelete() != null && request.getEnvironmentsToDelete().length > 0) {
            resourcePermissionService.revokePermission(resourceTemplate, Subject.ENVIRONMENT, request.getEnvironmentsToDelete());
        }
        List<String> envIds = Lists.newArrayList();
        if (request.getApplicationsToAdd() != null && request.getApplicationsToAdd().length > 0) {
            resourcePermissionService.grantPermission(resourceTemplate, Subject.APPLICATION, request.getApplicationsToAdd());
            // when an app is added, all eventual existing env authorizations are removed
            for (String applicationToAddId : request.getApplicationsToAdd()) {
                ApplicationEnvironment[] aes = applicationEnvironmentService.getByApplicationId(applicationToAddId);
                for (ApplicationEnvironment ae : aes) {
                    envIds.add(ae.getId());
                }
            }
            if (!envIds.isEmpty()) {
                resourcePermissionService.revokePermission(resourceTemplate, Subject.ENVIRONMENT, envIds.toArray(new String[envIds.size()]));
            }
        }
        if (request.getEnvironmentsToAdd() != null && request.getEnvironmentsToAdd().length > 0) {
            List<String> envToAddSet = Arrays.stream(request.getEnvironmentsToAdd()).filter(env -> !envIds.contains(env)).collect(Collectors.toList());
            resourcePermissionService.grantPermission(resourceTemplate, Subject.ENVIRONMENT, envToAddSet.toArray(new String[envToAddSet.size()]));
        }

After Change


        checkAllAuthorizationsForApplicationsAndEnvironments(request, location);

        LocationResourceTemplate resourceTemplate = locationResourceService.getOrFail(resourceId);
        if (ArrayUtils.isNotEmpty(request.getApplicationsToDelete())) {
            resourcePermissionService.revokePermission(resourceTemplate, Subject.APPLICATION, request.getApplicationsToDelete());
        }
        if (ArrayUtils.isNotEmpty(request.getEnvironmentsToDelete())) {
            resourcePermissionService.revokePermission(resourceTemplate, Subject.ENVIRONMENT, request.getEnvironmentsToDelete());
        }
        Set<String> envIds = Sets.newHashSet();
        if (ArrayUtils.isNotEmpty(request.getApplicationsToAdd())) {
            resourcePermissionService.grantPermission(resourceTemplate, Subject.APPLICATION, request.getApplicationsToAdd());
            // when an app is added, all eventual existing env authorizations are removed
            for (String applicationToAddId : request.getApplicationsToAdd()) {
                ApplicationEnvironment[] aes = applicationEnvironmentService.getByApplicationId(applicationToAddId);
                for (ApplicationEnvironment ae : aes) {
                    envIds.add(ae.getId());
                }
            }
            if (!envIds.isEmpty()) {
                resourcePermissionService.revokePermission(resourceTemplate, Subject.ENVIRONMENT, envIds.toArray(new String[envIds.size()]));
            }
        }
        if (ArrayUtils.isNotEmpty(request.getEnvironmentsToAdd())) {
            List<String> envToAddSet = Arrays.stream(request.getEnvironmentsToAdd()).filter(env -> !envIds.contains(env)).collect(Collectors.toList());
            resourcePermissionService.grantPermission(resourceTemplate, Subject.ENVIRONMENT, envToAddSet.toArray(new String[envToAddSet.size()]));
        }